package LeetCode.LC17;

import java.util.ArrayList;
import java.util.List;

/**
 * 17. 电话号码的字母组合
 * 给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。
 * 给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。
 * @author corn
 * @create 2020-11-02-23:43
 */
public class Solution {
    private List<String> letters =new ArrayList<>();
    private List<String> orders =new ArrayList<>();
    public List<String> letterCombinations(String digits) {
        if(digits.equals("")){
            return orders;
        }
        letters.add("abc");
        letters.add("def");
        letters.add("ghi");
        letters.add("jkl");
        letters.add("mno");
        letters.add("pqrs");
        letters.add("tuv");
        letters.add("wxyz");
        backtrack(digits, 0, "");
        return orders;
    }
    public void backtrack(String digits, int index, String s){
        if(index == digits.length()){
            orders.add(s);
            return ;
        }
        int a = digits.charAt(index) - '0';
        String letter = letters.get(a - 2);
        for(int i=0 ; i <letter.length(); i++){
            backtrack(digits,index + 1, s+letter.charAt(i));
        }
    }
}
